There are many different ways to inform a user of a running status of a process. For example, a progress bar is frequently used to indicate to a user the relative progress made by a process being executed. A progress bar helps a user to find out how far a process has advanced towards its completion. It is also a good indicator of how fast the process is executed. For instance, a progress bar is often used for a process of downloading data from a network such as the Internet to indicate how much of the data has been downloaded. A user can also perceive the rate at which the data is downloaded from the speed at which the progress bar is advancing. Another example of the usefulness of progress bars is in software installation processes. By viewing the progress bar, a user can find out how far the installation process has advanced. The user can also see how quickly the installation process is advancing.
Users often rely on progress bars for making many decisions. For instance, a slow moving progress bar may convince a user who is downloading a file from the Internet to find some other things to do rather than waiting for the downloading process to complete. Additionally, a user who is connected to a paying Internet station at, for instance, an airport may decide to stop downloading a file prior to completion if the user can infer from a slow moving progress bar that s/he may not have enough time to finish downloading the file before the boarding time, thereby saving on a service fee that is charged by minutes of usage.
Often, however, many of intended benefits associated with using a progress bar are defeated due to lack of intelligence behind the mechanism for advancing the progress bar. In many instances, a progress bar reaches the end of the bar track even though the process associated with the progress bar is still being executed. Also, in many instances, a progress bar may stop advancing for awhile and then jump to the end of the bar track all of sudden in a fraction of a second, or may even repeat a cycle of such behavior during a single running instance. Users under such circumstances have no way of predicting how far a process really has advanced or of learning a likely speed at which the process is being executed.
Currently, advancing mechanisms of a progress bar rely on rather crude techniques. For example, an advancing mechanism may rely on a single runtime or a small set of runtimes that has been manually measured by a individual using a stopwatch or even a wristwatch that the person was wearing at the time of measurement. Further, an instruction that advances a progress bar for a unit distance may be placed among the instructions that make up a process associated with the progress bar. Because users may run a process on systems of different capabilities and different operational environments, however, such crude techniques often fail to provide even the minimum intelligence that is required to confer intended benefits of using a progress bar.